package com.atguigu.lease.admin.service.impl;

import com.atguigu.lease.admin.service.FileService;
import com.atguigu.lease.common.config.MinioConfig;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.errors.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

@Service //!!!必须加组件注解！！！
public class FileServiceImpl implements FileService {
    @Autowired
    MinioClient minioClient;

//    public static void main(String[] args) {
//        String fileName = "lyf.jpg";
//        fileName = new SimpleDateFormat("yyyyMM/dd/").format(new Date())+  System.currentTimeMillis()+"_"+UUID.randomUUID().toString().substring(0,8)
//                +fileName.substring(fileName.lastIndexOf("."));
//
//        System.out.println("fileName = " + fileName);
//
//    }
    @Override
    public String uploadFile(MultipartFile file) {
        //解析文件的名称+创建自定义的目录+唯一文件名
        String fileName = file.getOriginalFilename();//获取上传的文件的名称
        fileName = new SimpleDateFormat("yyyyMM/dd/").format(new Date())+  System.currentTimeMillis()+"_"+UUID.randomUUID().toString().substring(0,8)
                +fileName.substring(fileName.lastIndexOf("."));

        //将文件上传到minio中
        try {
            minioClient.putObject(PutObjectArgs.builder()
                            //保存文件的桶
                            .bucket(MinioConfig.BUCKET_NAME)
                            //桶内保存文件的路径+文件名称:
                            //  上传的文件 最好按一定规则保存、文件名称最好唯一
                            .object(fileName)
                            // 上传的文件流
                            //参数1： 要上传的文件流，参数2：文件流大小，参数3：不分片上传
                            .stream(file.getInputStream(), file.getSize() , -1)
                    .build());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        //拼接文件路径： url+桶名称+桶内文件的路径
        // http://192.168.6.100:9000/stgy/202509/24/lyf.jpg
        String path = MinioConfig.ENDPOINT + "/" + MinioConfig.BUCKET_NAME + "/" + fileName;
        return path;
    }
}
